package com.koro.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Configuration;

import java.lang.reflect.Method;

@Slf4j
@Aspect
@Configuration
public class DataAccessAspect {

    /**
     *    1，Object[ ]  getArgs ：返回目标方法的参数；
     *
     *     2，Signature getSignature：返回目标方法的签名；
     *
     *     3，Object getTarget ：返回织入增强处理的目标对象；
     *
     *     4，Object getThis ： 返回AOP框架为目标对象生成的代理对象；
     */


    @Pointcut("@annotation(com.koro.annotation.DataAccess)")
    public void DataAccessPointCut() {
    }

    @Around("DataAccessPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {


        Object[] sourceObject = point.getArgs();
        Method[] m = sourceObject[0].getClass().getMethods();
        for (int i = 0; i < m.length; i++) {
            System.out.println(m[i].getName());
        }

        return null;
    }

}
